package com.yjz.beanValid.annotation;

import com.yjz.beanValid.annotation.CaseMode;
import com.yjz.beanValid.annotation.CheckCase;
import jakarta.validation.Constraint;
import jakarta.validation.Payload;
import jakarta.validation.ReportAsSingleViolation;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;

import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.TYPE_USE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

@ReportAsSingleViolation
/**
 * 默认情况下，组合注解中的一个或多个子注解校验失败的情况下，会分别触发子注解各自`错误信息`，
 * 如果想要使用组合注解中定义的错误信息，则添加该注解。添加之后只要组合注解中有至少一个子注解校验失败，则会生成组合注解中定义的错误信息，子注解的错误信息被忽略。
 */
@NotNull
@Size(min = 2, max = 14)
@CheckCase(CaseMode.UPPER)
@Target({ METHOD, FIELD, ANNOTATION_TYPE, TYPE_USE })
@Retention(RUNTIME)
@Constraint(validatedBy = { })
@Documented
public @interface ValidLicensePlate {

    String message() default "身份证格式不正确";

    Class<?>[] groups() default { };

    Class<? extends Payload>[] payload() default { };
}

